Environment
env:這是一個環境物件,它讓您訪問不同上下文資訊,像使用者、語言、公司等。
self.env.user:這讓您從環境中取得當前使用者的資訊,例如名稱、角色。
self.env['res.partner']:這讓您在環境中取得「res.partner」這個模型,通常代表合作夥伴,像客戶或供應商。
self.env.lang:這讓您得知當前語言設定,特別在多語言應用程式中有用。
self.env.company:這讓您知道目前所在的公司,特別在支援多公司的情境下有用。
self.env.companies:這列出使用者可以訪問的所有公司,特別是在多公司情境下有用。
@api 裝飾器在Odoo框架中是用來定義模型方法的一個重要工具,它可以用來實現不同類型的功能。其中一個常見的用途是為了提高資料庫效能,以及在操作記錄集(recordset)時確保適當的上下文。以下是一些常見的內建CRUD(創建、讀取、更新、刪除)操作和其他操作:
read([]):@api 裝飾器可用於自定義 read 方法,以根據您的需求定制讀取記錄的邏輯。這對於檢索記錄的特定字段或執行特定計算很有用。通常,@api 中的 @api.depends 裝飾器可用於確保當相關字段發生變化時,相應的 read 方法被自動觸發。
create({}):使用 @api 裝飾器,您可以自定義 create 方法,以便在創建新記錄時執行額外的邏輯。這可用於檢驗或處理要創建的數據,然後進行創建操作。
write({}):write 方法是用來自定義記錄更新的邏輯的地方。您可以使用 @api 裝飾器來定義此方法,以便在更新記錄時執行特定的操作,例如驗證、歷史記錄等。
unlink():unlink 方法用於自定義記錄刪除的邏輯。您可以使用 @api 裝飾器來定義此方法,以執行額外的操作,例如確保不允許刪除某些記錄,或者執行刪除之前的清理操作。
browse(int):@api.model 裝飾器可用於自定義模型的 browse 方法,以根據給定的記錄ID檢索記錄。這可以用來執行自定義的查詢邏輯。
search():search 方法通常不需要 @api 裝飾器,但您可以使用它來自定義自己的搜索邏輯,以根據特定條件查找記錄。它可以返回一個記錄集,以供後續操作使用。
當我們想使用其他model的recordset的時候,我們可以這樣做:
def other_recordset(self):
all_members=self.env['library.member'].search([])
print("All members:",all_members)
return True
或是我們想要創建一個新record:
record=self.evn['library.book.category'].create(parent_category_val)
還可以更新record:
def update_record(self):
self.ensure_one()
self.date_release=fields.Date.today()
------------------------------------------
def update_record(self):
self.ensure_one()
self.update({'date_release':'fields.Date.today()'})
我們也可以透過write({})來對record的操作
record.write({'child_ids':[0,0,child]})
record.write({'child_ids':[1,child_index,update_child]})
這邊詳細介紹這些( , , )
內所代標的意思
(0,0,{}) -創建record
(1,id,{}) -更新record
(2,id) -刪除record
(3,id) -解除record關聯
(4,id) -關聯record
(5,) -刪除所有關聯record
(6,0,[]) -替換關聯record